package br.com.damazzy.negocio.persistencia.dao;

import java.io.Serializable;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import br.com.damazzy.conexao.Conexao;
import br.com.damazzy.negocio.entidade.Tamanho;

public class TamanhoDaoImpl implements TamanhoDao {

	public Tamanho alterar(Tamanho objeto) throws Exception {
		
		Connection conn = null;
		PreparedStatement ps = null;
		int cont = 1;
		
		try {
			conn = Conexao.criarConexao();
			
			StringBuffer sql = new StringBuffer();
			sql.append("update damazzy.tamanho set codigo = ?, descricao = ? where idtamanho = ?");
			
			ps = conn.prepareStatement(sql.toString());
			ps.setString(cont++, objeto.getCodigo());
			ps.setString(cont++, objeto.getDescricao());
			ps.setInt(cont++, objeto.getIdTamanho());
			
			ps.executeUpdate();
			
		} catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Erro ao alterar o tamanho.");
		} finally {
			Conexao.fecharConexao(conn);
		}
		
		return this.obter(objeto.getIdTamanho());
	}

	public void excluir(Serializable chave) throws Exception {
		
		Connection conn = null;
		PreparedStatement ps = null;
		
		try {
			conn = Conexao.criarConexao();
			
			StringBuffer sql = new StringBuffer();
			sql.append("delete from damazzy.tamanho where idtamanho = ?");
			
			ps = conn.prepareStatement(sql.toString());
			
			Integer id = (Integer) chave;
			ps.setInt(1, id);
			
			ps.executeUpdate();
			
		} catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Erro ao excluir o tamanho.");
		} finally {
			Conexao.fecharConexao(conn);
		}
	}

	public Tamanho incluir(Tamanho objeto) throws Exception {

		Connection conn = null;
		PreparedStatement ps = null;
		int cont = 1;
		
		try {
			conn = Conexao.criarConexao();
			
			StringBuffer sql = new StringBuffer();
			sql.append("insert into damazzy.tamanho (codigo, descricao) values (?, ?)");
			
			ps = conn.prepareStatement(sql.toString());
			ps.setString(cont++, objeto.getCodigo());
			ps.setString(cont++, objeto.getDescricao());
			
			ps.executeUpdate();
			
		} catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Erro ao incluir o tamanho.");
		} finally {
			Conexao.fecharConexao(conn);
		}
		
		return null;
	}

	public List<Tamanho> listar() throws Exception {
		return this.pesquisar(new Tamanho());
	}

	public Tamanho obter(Serializable chave) throws Exception {
		
		Tamanho tamanho = null;
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		
		try {
			conn = Conexao.criarConexao();
			
			StringBuffer sql = new StringBuffer();
			sql.append("select * from damazzy.tamanho where idtamanho = ?");
			
			ps = conn.prepareStatement(sql.toString());
			
			Integer id = (Integer) chave;
			ps.setInt(1, id);
			
			rs = ps.executeQuery();
			
			if (rs.next()) {
				tamanho = new Tamanho();
				
				tamanho.setIdTamanho(rs.getInt("idtamanho"));
				tamanho.setCodigo(rs.getString("codigo"));
				tamanho.setDescricao(rs.getString("descricao"));
			}
			
		} catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Erro ao obter o tamanho.");
		} finally {
			Conexao.fecharConexao(conn);
		}
		
		return tamanho;
	}

	public List<Tamanho> pesquisar(Tamanho objeto) throws Exception {
		
		Tamanho tamanhoFiltro = objeto;
		Tamanho tamanho;
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		List<Tamanho> tamanhos = new ArrayList<Tamanho>();
		
		try {
			conn = Conexao.criarConexao();
			
			StringBuffer sql = new StringBuffer();
			sql.append("select * from damazzy.tamanho where 1 = 1 ");
			
			if (tamanhoFiltro.getCodigo() != null) {
				sql.append("and codigo like '%" + tamanhoFiltro.getCodigo() + "%'");
			}
			
			if (tamanhoFiltro.getDescricao() != null) {
				sql.append("and descricao like '%" + tamanhoFiltro.getDescricao() + "%'");
			}
			
			sql.append(" order by codigo");
			
			ps = conn.prepareStatement(sql.toString());
			rs = ps.executeQuery();
			
			while (rs.next()) {
				tamanho = new Tamanho();
				
				tamanho.setIdTamanho(rs.getInt("idtamanho"));
				tamanho.setCodigo(rs.getString("codigo"));
				tamanho.setDescricao(rs.getString("descricao"));
				
				tamanhos.add(tamanho);
			}
			
		} catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Erro ao pesquisar os tamanhos.");
		} finally {
			Conexao.fecharConexao(conn);
		}
		
		return tamanhos;
	}
}
